home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / misc / amag / sh9301c.lha / Oberon(S.67) / Listing12.mod < prev    next >
Text File  |  1993-01-22  |  3KB  |  105 lines

  1. MODULE Init;
  2. IMPORT
  3.   io;
  4. CONST
  5.   Blau = 0;
  6.   Gruen = 1;
  7.   Violett = 2;
  8. (*  ...  *)
  9. TYPE
  10.   Feld = RECORD
  11.     name: ARRAY 50 OF CHAR;
  12.     spieler: SET;
  13.   END;
  14.   FeldPtr = POINTER TO Feld;
  15.   Kaeuflich = RECORD (Feld)
  16.     preis: INTEGER;
  17.     hypothek: BOOLEAN;
  18.     gekauft: BOOLEAN;
  19.   END;
  20.   KaeuflichPtr = POINTER TO Kaeuflich;
  21.   Tarife = ARRAY 6 OF INTEGER;
  22.   Strasse = RECORD (Kaeuflich)
  23.     farbe: INTEGER;
  24.     haeuser: INTEGER;
  25.     miete: Tarife;
  26.   END;
  27.   StrassePtr = POINTER TO Strasse;
  28.   Bahnhof = RECORD (Kaeuflich)
  29.   END;
  30.   BahnhofPtr = POINTER TO Bahnhof;
  31.   (* ... weitere Typen ... *)
  32. VAR
  33.   Plan: ARRAY 40 OF FeldPtr;
  34. PROCEDURE Kaufen (VAR KaufFeld: FeldPtr);
  35. BEGIN
  36.   IF KaufFeld IS Kaeuflich THEN (* Typtest !!! *)
  37.     WITH KaufFeld: Kaeuflich DO
  38.       IF KaufFeld.gekauft THEN
  39.         io.WriteString (KaufFeld.name);
  40.         io.WriteString (" ist schon verkauft!\n");
  41.       ELSE
  42.         KaufFeld.gekauft := TRUE;
  43.         (* ... *)
  44.       END;
  45.     END;
  46.   ELSE
  47.     io.WriteString (KaufFeld.name);
  48.     io.WriteString (" kann nicht gekauft werden!\n");
  49.   END;
  50. END Kaufen;
  51. PROCEDURE InitFeld (Name: ARRAY OF CHAR): FeldPtr;
  52. VAR
  53.   NeuesFeld: FeldPtr;
  54. BEGIN
  55.   NEW (NeuesFeld); (* Speicher holen *)
  56.   IF NeuesFeld = NIL THEN HALT (20) END; (* kein Speicher! *)
  57.  
  58.   COPY (Name, NeuesFeld.name);
  59.   NeuesFeld.spieler  := SET {};
  60.   RETURN NeuesFeld;
  61. END InitFeld;
  62. PROCEDURE InitStrasse (Name: ARRAY OF CHAR;
  63.                        Preis: INTEGER;
  64.                        Farbe: INTEGER;
  65.                        Miete: Tarife): StrassePtr;
  66. VAR
  67.   NeueStrasse: StrassePtr;
  68. BEGIN
  69.   NEW (NeueStrasse); (* Speicher holen *)
  70.   IF NeueStrasse = NIL THEN HALT (20) END; (* kein Speicher! *)
  71.   COPY (Name, NeueStrasse.name);
  72.   NeueStrasse.spieler  := SET {};
  73.   NeueStrasse.preis    := Preis;
  74.   NeueStrasse.hypothek := FALSE;
  75.   NeueStrasse.gekauft  := FALSE;
  76.   NeueStrasse.farbe    := Farbe;
  77.   NeueStrasse.haeuser  := 0;
  78.   NeueStrasse.miete    := Miete;
  79.   RETURN NeueStrasse;
  80. END InitStrasse;
  81. PROCEDURE InitBahnhof (Name: ARRAY OF CHAR;
  82.                        Preis: INTEGER): BahnhofPtr;
  83. VAR
  84.   NeuerBahnhof: BahnhofPtr;
  85. BEGIN
  86.   NEW (NeuerBahnhof); (* Speicher holen *)
  87.   IF NeuerBahnhof = NIL THEN HALT (20) END; (* kein Speicher! *)
  88.   COPY (Name, NeuerBahnhof.name);
  89.   NeuerBahnhof.spieler  := SET {};
  90.   NeuerBahnhof.preis    := Preis;
  91.   NeuerBahnhof.hypothek := FALSE;
  92.   NeuerBahnhof.gekauft  := FALSE;
  93.   RETURN NeuerBahnhof;
  94. END InitBahnhof;
  95. (* ... *)
  96. BEGIN
  97.   Plan[0] := InitFeld ("Start");
  98.   Plan[1] := InitStrasse ("Oberonweg", 333, Blau,
  99.                           Tarife (10, 50, 100, 150, 200, 500));
  100. (*  ...  *)
  101.   Plan[5] := InitBahnhof ("Hauptbahnhof", 500);
  102. (*  ...  *)
  103.   Kaufen (Plan[0]); Kaufen (Plan[1]); Kaufen (Plan[1]);
  104. END Init.
  105.